package com.ruoyi.rsikManage.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.rsikManage.domain.TUnitConfig;
import com.ruoyi.rsikManage.domain.common.SubscriptionsRequest;
import com.ruoyi.rsikManage.domain.vo.DiagnosisPlanRequestBody;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.client.RestTemplate;

import java.util.List;
import java.util.Map;

/**
 * JY系统服务接口
 */
public interface JyService {
    // 获取 HTTP 头信息
    HttpHeaders getHttpHeader();

    // 获取监控回放流地址
    String getReplayStreamUrlOfTheMonitor(String channelCode, String startTime, String endTime, String streamMode);

    // 获取免密码登录 URL
    AjaxResult getPasswordFreeLoginURL(RestTemplate restTemplate);

    // 获取免密码登录 URL
    AjaxResult getPasswordFreeLoginURLForUnitCodes(TUnitConfig tUnitConfig);

    // 获取访问令牌
    String getAccessToken();

    // 获取访问令牌
    String getAccessTokenForUnitCodes(TUnitConfig tUnitConfig);

    // 获取新的访问令牌
    String getNewAccessToken();

    // 获取新的访问令牌
    String getNewAccessTokenForUnitCodes(TUnitConfig tUnitConfig);

    // 查询事件订阅
    String selectEventSubscriptions();

    // 查询事件订阅
    String selectEventSubscriptionsForUnitCodes(TUnitConfig tUnitConfig);

    // 事件订阅
    String eventSubscriptions(Map<String, Object> param);

    // 事件订阅
    String eventSubscriptionsForUnitCodes(TUnitConfig tUnitConfig, Map<String, Object> param);

    // 删除事件订阅
    String deleteEventSubscriptions(Map<String, Object> param);

    // 删除事件订阅
    String deleteEventSubscriptionsForUnitCodes(TUnitConfig tUnitConfig,Map<String, Object> param);

    // 图片地址转换
    String picAddrTrans(List<String> addrList);

    /**
     * 图片地址转换
     * @param addrList
     * @return
     */

    String picAddrTransForUnitCodes(List<String> addrList,TUnitConfig tUnitConfig);

    // 获取带设备的通道列表
    String getChannelListWithDevice();

    // 获取带设备的通道列表
    String getChannelListWithDeviceForUnitCodes(TUnitConfig tUnitConfig);

    // 获取实时流地址
    List<Map<String, Object>> getLiveStreamUrl(Map<String, Object> param);

    // 获取回放流地址
    List<Map<String, Object>> getLiveStreamUrlReplay(Map<String, Object> param);

    Map<String, Object> getLiveStreamUrlReplayV2(Map<String, Object> param);

    Map<String, Object> getLiveStreamUrlReplayFinal(Map<String, Object> param);


    // 获取应用实时流地址
    List<Map<String, Object>> getLiveStreamUrlApp(Map<String, Object> param);

    Map<String, Object> getLiveStreamUrlAppV2(Map<String, Object> param);

    Map<String, Object> getLiveStreamUrlFinalAppV2(Map<String, Object> param);

    // 获取监控的实时流地址
    String getLiveStreamUrlOfTheMonitor(String channel_code, String stream_type, String stream_mode, String keep_alive, String visit_ip) throws JsonProcessingException;

    // 获取录像播放地址
    String getPlayRecordUrl(String channel_code, String event_time, String event_id);

    // 获取索引和名称
    String getIndexAndName();

    // 添加 DVR
    String addDVR(Map<String, Object> param);

    // 删除 DVR
    String deleteDVR(String resource_type, String ape_ids);

    // 更新 DVR
    String updateDVR(Map<String, Object> param);

    // 查询 DVR 列表
    String selectDVRList(String resource_type, String ape_id, String ape_id_list, String name, String sub_type, String access_type, String producer, String is_online, String org_index, String include_child, String owner_aps_id, String cascaded_id, String page_size, String page_num, String ip_addr);

    // 获取视频诊断结果
    String getVideoDiagnosisResults(String channel_name, String start_time, Integer page_num, Integer page_size);

    // 获取已安装的算法
    String getInstalledAlgorithms();

    // 获取已安装的算法
    String getInstalledAlgorithmsForUnitCodes(TUnitConfig tUnitConfig);

    // 获取视频分析任务
    String getVideoAnalysisTasks();

    // 获取视频分析任务
    String getVideoAnalysisTasksForUnitCodes(TUnitConfig tUnitConfig);

    // 统计在线率
    String countOnlineRate(String pageSize, String pageNum);

    // 统计合规率
    String countComplianceRatio(String pageSize, String pageNum, String queryDate);

    // 获取最新视频诊断结果
    String getLastVideoDiagnosisResult(Map<String, Object> param);


    String getLastVideoDiagnosisResultForUnitCodes(TUnitConfig tUnitConfig,Map<String, Object> param);

    String getLastVideoDiagnosisResultByJYIP(Map<String, Object> param);


    // 添加视频诊断方案
    String addVideoDiagnosisScheme(Map<String, Object> param);

    // 更新视频诊断方案
    String updateVideoDiagnosisScheme(String schemeId, Map<String, Object> param);

    // 分页查询视频诊断方案列表
    String selectVideoDiagnosisSchemeList(String name, Integer page_num, Integer page_size);

    // 查询视频诊断方案
    String selectVideoDiagnosisScheme(String schemeId);

    // 删除视频诊断方案
    String deleteVideoDiagnosisSchemes(String schemeIds);

    // 添加视频诊断计划
    String addVideoDiagnosisPlan(Map<String, Object> param);

    // 更新视频诊断计划
    String updateVideoDiagnosisPlan(String planId, Map<String, Object> param);

    // 分页查询视频诊断计划列表
    String selectVideoDiagnosisPlanList(String name, Integer page_num, Integer page_size);

    // 查询视频诊断计划
    String selectVideoDiagnosisPlan(String planId);

    // 删除视频诊断计划
    String deleteVideoDiagnosisPlans(String planIds);

    // 更新计划状态
    String updatePlanStatus(String ids, Integer status);

    AjaxResult batchAddDiagnosisPlan(@RequestBody DiagnosisPlanRequestBody requestBody);

    Map<String, Object> getReplayStreamUrl(String channel_code, String start_time, String end_time);

    Map<String, Object> getReplayStreamUrlv2(String channel_code, String start_time, String end_time);


    Map<String, Object> getRecordStreamDownload(String channel_code, String start_time, String end_time,String output_file);
}
